﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SmApiLibrary.libs;

namespace SmAp.Operator.Interface
{
    public interface ITimeline
    {
        WeiBoType weiboType
        { get; }

        /// <summary>
        /// 返回最新的20条公共微博。返回结果非完全实时，最长会缓存60秒
        /// </summary>
        /// <param name="source">申请应用时分配的AppKey，调用接口时候代表应用的唯一身份。（采用OAuth授权方式不需要此参数）</param>
        /// <param name="count">每次返回的记录数</param>
        /// <param name="base_app">是否仅获取当前应用发布的信息。0为所有，1为仅本应用。</param>
        /// <returns>json或者XML字符串</returns>
        string GetPublicTimeLine(string source, int count, int base_app, OAuthBase oaubase);

        /// <summary>
        /// 返回最新的20条公共微博。返回结果非完全实时，最长会缓存60秒
        /// </summary>
        /// <param name="count">每次返回的记录数</param>
        /// <param name="base_app">是否仅获取当前应用发布的信息。0为所有，1为仅本应用。</param>
        /// <returns>json或者XML字符串</returns>
        string GetPublicTimeLine(int count, int base_app, OAuthBase oaubase);


        /// <summary>
        /// 获取用户的微博
        /// </summary>
        /// <param name="user_id">用户ID</param>
        /// <returns></returns>
        string GetUserTimeline(string user_id, OAuthBase oaubase);

        /// <summary>
        /// 获取用户的微博
        /// </summary>
        /// <param name="user_id">用户ID</param>
        /// <param name="since_id">从那条微博以后开始获取微博</param>
        /// <returns></returns>
        string GetUserTimeline(string user_id, string since_id, OAuthBase oaubase);

        /// <summary>
        /// 获取用户的微博
        /// </summary>
        /// <param name="user_id">用户ID</param>
        /// <param name="count">页数据条数</param>
        /// <param name="page">页码</param>
        /// <returns></returns>
        string GetUserTimeline(string user_id, int count,int page, OAuthBase oaubase);

        /// <summary>
        /// 获取用户的微博
        /// </summary>
        /// <param name="user_id">用户ID</param>
        /// <param name="max_id">返回ID小于或等于max_id（即比max_id发表时间早的）的微博消息</param>
        /// <param name="count">每页的大小</param>
        /// <returns></returns>
        string GetUserTimeline(string user_id, string max_id, int count, OAuthBase oaubase);

        /// <summary>
        /// 获取用户的微博
        /// </summary>
        /// <param name="user_id">用户ID</param>
        /// <param name="since_id">从那条微博以后开始获取微博</param>
        /// <param name="max_id">返回ID小于或等于max_id（即比max_id发表时间早的）的微博消息</param>
        /// <param name="count">每页的大小</param>
        /// <returns></returns>
        string GetUserTimeline(string user_id, string since_id, string max_id, int count, OAuthBase oaubase);

        /// <summary>
        /// 返回最新n条提到登录用户的微博消息（即包含@username的微博消息）
        /// </summary>
        /// <returns></returns>
        string GetMentions(OAuthBase oaubase);

        /// <summary>
        /// 返回最新n条提到登录用户的微博消息（即包含@username的微博消息）
        /// </summary>
        /// <param name="since_id">只返回ID比since_id大的提到当前登录用户的微博消息（比since_id发表时间晚）。</param>
        /// <returns></returns>
        string GetMentions(string since_id, OAuthBase oaubase);

        /// <summary>
        /// 返回最新n条提到登录用户的微博消息（即包含@username的微博消息）
        /// </summary>
        /// <param name="since_id">只返回ID比max_id小的提到当前登录用户的微博消息（比max_id发表时间早）。</param>
        /// <returns></returns>
        string GetMentions(string max_id, int count, OAuthBase oaubase);

        /// <summary>
        /// 获取Atme的微博
        /// </summary>
        /// <param name="count">每页Atme数目</param>
        /// <param name="page">页码</param>
        /// <param name="oaubase"></param>
        /// <returns></returns>
        string GetMentions(int count, int page, OAuthBase oaubase);

        /// <summary>
        /// 获取当前用户发布的评论
        /// </summary>
        /// <returns></returns>
        string GetCommentsByMe(OAuthBase oaubase);

        /// <summary>
        /// 获取当前用户发布的评论
        /// </summary>
        /// <param name="since_id">只返回ID比since_id大的当前登录用户发布的评论消息（比since_id发表时间晚）。</param>
        /// <returns></returns>
        string GetCommentsByMe(string since_id, OAuthBase oaubase);

        /// <summary>
        /// 获取当前用户受到的评论
        /// </summary>
        /// <returns></returns>
        string GetCommentsToMe(OAuthBase oaubase);

        /// <summary>
        /// 获取当前用户收到的评论
        /// </summary>
        /// <param name="oaubase"></param>
        /// <param name="count"></param>
        /// <param name="page"></param>
        /// <returns></returns>
        string GetCommentsToMe(OAuthBase oaubase, int count, int page);

        /// <summary>
        /// 获取当前用户受到的评论
        /// </summary>
        /// <param name="since_id">只返回ID比since_id大的当前登录用户发布的评论消息（比since_id发表时间晚）。</param>
        /// <returns></returns>
        string GetCommentsToMe(string since_id, OAuthBase oaubase);

        /// <summary>
        /// 获取当前用户受到的评论
        /// </summary>
        /// <param name="since_id">只返回ID比since_id大的当前登录用户发布的评论消息（比since_id发表时间晚）。</param>
        /// <returns></returns>
        string GetCommentsToMe(string max_id, int count, OAuthBase oaubase);

        /// <summary>
        /// 获取微博的评论
        /// </summary>
        /// <param name="id">微博ID</param>
        /// <returns></returns>
        string GetComments(string id, OAuthBase oaubase);

        /// <summary>
        /// 根据微博消息ID返回某条微博消息的评论列表 
        /// </summary>
        /// <param name="id">微博ID</param>
        /// <param name="count">单页返回的记录条数(默认值20，最大值200)</param>
        /// <param name="page">返回结果的页码(默认值1)</param>
        /// <returns></returns>
        string GetComments(string id, int count, int page, OAuthBase oaubase);

        /// <summary>
        /// 批量获取n条微博消息的评论数和转发数。一次请求最多可以获取20条微博消息的评论数和转发数
        /// </summary>
        /// <param name="ids">微博ID集合</param>
        /// <returns></returns>
        string GetCounts(string ids, OAuthBase oaubase);

        /// <summary>
        /// 将当前登录用户的某种新消息的未读数为0。可以清零的计数类别有：1. 评论数，2. @me数，3. 私信数，4. 关注数
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        string ResetCount(string type, OAuthBase oaubase);

        /// <summary>
        /// 获取当前用户Web主站未读消息数，包括：是否有新微博消息、最新提到“我”的微博消息数、新评论数、新私信数、新粉丝数。
        /// </summary>
        /// <returns></returns>
        string GetUnReadCount(OAuthBase oaubase);

        /// <summary>
        /// 验证当前用户身份是否合法，通行证成功并开通微博，返回 user
        /// </summary>
        /// <returns></returns>
        string VerifyCredentials(OAuthBase oaubase);

        /// <summary>
        /// 按用户ID返回用户资料以及用户的最新发布的一条微博消息。
        /// </summary>
        /// <returns></returns>
        string GetUserInfo(string user_id, OAuthBase oaubase);

        /// <summary>
        /// 获取系统推荐的用户列表。
        /// </summary>
        /// <param name="type">用户类别</param>
        /// <returns></returns>
        string GetHotUsers(SinaUserType type, OAuthBase oaubase);

        /// <summary>
        /// 获取当前用户可能感兴趣的用户
        /// </summary>
        /// <returns></returns>
        string GetSuggestions(OAuthBase oaubase);

        /// <summary>
        /// 获取当前用户可能感兴趣的用户
        /// </summary>
        /// <param name="with_reason">是否返回推荐原因</param>
        /// <returns></returns>
        string GetSuggestions(bool with_reason, OAuthBase oaubase);

        /// <summary>
        /// 获取当前登录用户关注列表及每个关注用户的最新一条微博，返回结果(next_cursor字段，表示下一页的cursor)按关注时间倒序排列，最新关注的用户排在最前面。
        /// </summary>
        /// <param name="count">单页返回的记录条数(默认值20，最大值200)</param>
        /// <param name="cursor">分页(-1:返回第一页；0:已经到记录末尾)</param>
        /// <returns></returns>
        string GetFriends(int count, int cursor, OAuthBase oaubase);

        /// <summary>
        /// 根据用户Id获取用户关注列表及每个关注用户的最新一条微博，返回结果(next_cursor字段，表示下一页的cursor)按关注时间倒序排列，最新关注的用户排在最前面。
        /// </summary>
        /// <param name="user_id">用户ID</param>
        /// <param name="count">单页返回的记录条数(默认值20，最大值200)</param>
        /// <param name="cursor">分页(-1:返回第一页；0:已经到记录末尾)</param>
        /// <returns></returns>
        string GetFriends(string user_id, int count, int cursor, OAuthBase oaubase);

        /// <summary>
        /// 获取当前登录用户粉丝列表及每个粉丝的最新一条微博，返回结果(next_cursor字段，表示下一页的cursor)按粉丝的关注时间倒序排列，最新关注的粉丝排在最前面。注意：最多只能返回5000个
        /// </summary>
        /// <param name="count">单页返回的记录条数(默认值20，最大值200)</param>
        /// <param name="cursor">分页(-1:返回第一页；0:已经到记录末尾)</param>
        /// <returns></returns>
        string GetFollowers(int count, int cursor, OAuthBase oaubase);

        /// <summary>
        /// 获取用户粉丝列表及每个粉丝的最新一条微博，返回结果(next_cursor字段，表示下一页的cursor)按粉丝的关注时间倒序排列，最新关注的粉丝排在最前面。注意：最多只能返回5000个
        /// </summary>
        /// <param name="user_id">用户ID</param>
        /// <param name="count">单页返回的记录条数(默认值20，最大值200)</param>
        /// <param name="cursor">分页(-1:返回第一页；0:已经到记录末尾)</param>
        /// <returns></returns>
        string GetFollowers(string user_id, int count, int cursor, OAuthBase oaubase);

        /// <summary>
        /// 返回与关键字相匹配的微博用户。
        /// </summary>
        /// <param name="keyword">关键字</param>
        /// <param name="snick">搜索范围是否包含昵称。0为不包含，1为包含。</param>
        /// <param name="sdomain">搜索范围是否包含个性域名。0为不包含，1为包含。</param>
        /// <param name="sintro">搜索范围是否包含简介。0为不包含，1为包含。</param>
        /// <param name="province"></param>
        /// <param name="city"></param>
        /// <param name="gender">性别 (m 为男，f 为女) </param>
        /// <param name="comorsch">公司学校名称。</param>
        /// <param name="sort">排序方式，1为按更新时间，2为按粉丝数。 </param>
        /// <param name="page">页码</param>
        /// <param name="count">每页返回的用户数。默认10条</param>
        /// <param name="base_app">是否基于当前应用来获取数据。1表示基于当前应用来获取数据。</param>
        /// <returns></returns>
        string SearchUser(string keyword, bool snick, bool sdomain, bool sintro, int province, int city, string gender, string comorsch, int sort, int page, int count, bool base_app, OAuthBase oaubase);

        #region 关注相关接口
        /// <summary>
        /// 添加关注
        /// </summary>
        /// <param name="user_id">要关注用户的id</param>
        /// <returns></returns>
        string CreateFriend(string user_id, OAuthBase oaubase);

        /// <summary>
        /// 取消关注
        /// </summary>
        /// <param name="user_id">要取消关注用户的id</param>
        /// <returns></returns>
        string DestroyFriend(string user_id, OAuthBase oaubase);

        /// <summary>
        /// 判断用户a是否关注了用户b，返回示例：{"friends":true}
        /// </summary>
        /// <param name="user_a"></param>
        /// <param name="user_b"></param>
        /// <returns></returns>
        string IsFriend(string user_a, string user_b, OAuthBase oaubase);
        #endregion

        #region 发表微博、评论、私信、@me 接口
        /// <summary>
        /// 发布一条微博信息
        /// </summary>
        /// <param name="sMessage">文字内容</param>
        /// <returns>未知</returns>
        string AddWeiBo(string sMessage, OAuthBase oaubase);

        /// <summary>
        /// 发布一条图片微博信息
        /// </summary>
        /// <param name="sMessage">文字内容</param>
        /// <param name="pictureFilename">图片文件路径</param>
        /// <returns>未知</returns>
        string AddWeiBo(string sMessage, string pictureFilename, OAuthBase oaubase);

        /// <summary>
        /// 评论一条微博
        /// </summary>
        /// <param name="id">微博ID</param>
        /// <param name="comment">评论</param>
        /// <returns></returns>
        string Comment(string id, string comment, OAuthBase oaubase);

        /// <summary>
        /// 评论一条微博
        /// </summary>
        /// <param name="id">微博ID</param>
        /// <param name="comment">评论</param>
        /// <param name="comment_ori">当评论一条转发微博时，是否评论给原微博。0:不评论给原微博。1：评论给原微博。默认0.</param>
        /// <returns></returns>
        string Comment(string id, string comment, int comment_ori, OAuthBase oaubase);

        /// <summary>
        /// 转发一条微博
        /// </summary>
        /// <param name="id">微博ID</param>
        /// <returns></returns>
        string Repost(string id, OAuthBase oaubase);

        /// <summary>
        /// 转发并评论一条微博,is_comment(是否在转发的同时发表评论0表示不发表评论，1表示发表评论给当前微博，2表示发表评论给原微博，3是1、2都发表。默认为0。)
        /// </summary>
        /// <param name="id">微博ID</param>
        /// <param name="status">转发文本</param>
        /// <param name="is_comment">是否在转发的同时发表评论。0表示不发表评论，1表示发表评论给当前微博，2表示发表评论给原微博，3是1、2都发表。默认为0。 </param>
        /// <returns></returns>
        string Repost(string id, string status, int is_comment, OAuthBase oaubase);

        /// <summary>
        /// 发送私信
        /// </summary>
        /// <param name="user_id">私信接收方id</param>
        /// <param name="msg">私信内容</param>
        /// <returns></returns>
        string AddMessage(string user_id, string msg, OAuthBase oaubase);

        string DestroyMessage(string id, OAuthBase oaubase);
        #endregion


        #region --- 删除评论 ---
        string CommentDestroy(string id, OAuthBase oaubase);
        #endregion

        string ReplyComment(string id, string cid, string content, OAuthBase oaubase);

        /// <summary>
        /// 获取用户私信
        /// </summary>
        /// <param name="oaubase"></param>
        /// <returns></returns>
        string GetDirectMessage(OAuthBase oaubase);
        /// <summary>
        /// 获取用户私信
        /// </summary>
        /// <param name="count">私信数目</param>
        /// <param name="oaubase"></param>
        /// <returns></returns>
        string GetDirectMessage(int count, OAuthBase oaubase);

        /// <summary>
        /// 获取用户私信
        /// </summary>
        /// <param name="count">私信数目</param>
        /// <param name="oaubase"></param>
        /// <returns></returns>
        string GetDirectMessage(int count,int page,OAuthBase oaubase);

        /// <summary>
        /// 获取用户私信
        /// </summary>
        /// <param name="count">私信数目</param>
        /// <param name="oaubase"></param>
        /// <returns></returns>
        string GetDirectMessage(int count, string max_id, OAuthBase oaubase);

        /// <summary>
        /// 查询某原创微博的最新N条转发
        /// 仅仅只能查询原创微博
        /// </summary>
        /// <param name="id"></param>
        /// <param name="oaubase"></param>
        /// <returns></returns>
        string GetRepostTimeLine(string id, OAuthBase oaubase);

        /// <summary>
        /// 查询某原创微博的最新N条转发
        /// 仅仅只能查询原创微博
        /// </summary>
        /// <param name="id"></param>
        /// <param name="oaubase"></param>
        /// <returns></returns>
        string GetRepostTimeLine(string id, string maxId, OAuthBase oaubase);

        /// <summary>
        /// 根据微博ID获取当前微博的评论列表
        /// </summary>
        /// <param name="id"></param>
        /// <param name="oaubase"></param>
        /// <returns></returns>
        string GetComentsByStatusId(string id, OAuthBase oaubase);

        string DestoryStatus(string id, OAuthBase oaubase);

        string SearchStatus(string search, OAuthBase oaubase);

        /// <summary>
        /// 搜索微博内容
        /// </summary>
        /// <param name="search">搜索关键字</param>
        /// <param name="count">单页条数</param>
        /// <param name="pageIndex">页索引</param>
        /// <param name="oaubase"></param>
        /// <returns></returns>
        string SearchStatus(string search, int count, int pageIndex, OAuthBase oaubase);
    }

}
